package com.example.service1.provider.aop;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Component
@Aspect()
public class Service1Aop {

    @Pointcut(value = "bean(Service1Controller) && execution(* *(..))")
    public void pointcutService1(){
    }

    @Pointcut(value = "execution(* com.example.service1.provider.fallback.Service1Fallback.*(..))")
    public void pointcutFallback(){
    }



    @Before("pointcutService1()")
    public void beforeNoticeService1(){
        System.out.println("服务提供者，提供服务");
    }


    /**
     * aop切该fallback失败，即使自己注入，
     * 原因是SentinelResource里是自己实例化并自己去调用该实例力里的方法。
     */
    @Before("pointcutFallback()")
    public void beforeNoticeFallback(){
        System.out.println("触发服务提供者的fallback");
    }

}
